{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import stuff we need\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "import math\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "import zlmdb\n",
    "from cfxdb.schema import Schema"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "finished: collected vectors of length 2853\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "      <th>category</th>\n",
       "      <th>value2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>2853.000000</td>\n",
       "      <td>2853.000000</td>\n",
       "      <td>2853.000000</td>\n",
       "      <td>2853.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>51.159832</td>\n",
       "      <td>50.298633</td>\n",
       "      <td>3.039607</td>\n",
       "      <td>0.491693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>29.187472</td>\n",
       "      <td>29.284930</td>\n",
       "      <td>1.425883</td>\n",
       "      <td>0.288927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>27.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.241620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>52.000000</td>\n",
       "      <td>50.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.487378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>76.000000</td>\n",
       "      <td>76.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.740377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>0.999934</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 x            y     category       value2\n",
       "count  2853.000000  2853.000000  2853.000000  2853.000000\n",
       "mean     51.159832    50.298633     3.039607     0.491693\n",
       "std      29.187472    29.284930     1.425883     0.288927\n",
       "min       0.000000     0.000000     1.000000     0.000076\n",
       "25%      27.000000    25.000000     2.000000     0.241620\n",
       "50%      52.000000    50.000000     3.000000     0.487378\n",
       "75%      76.000000    76.000000     4.000000     0.740377\n",
       "max     100.000000   100.000000     5.000000     0.999934"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# attach to our crossbar event database\n",
    "# when running notebook inside docker\n",
    "DBFILE = '../testdb'\n",
    "\n",
    "# when running notebook directly on host\n",
    "DBFILE = '../../crossbar/.testdb'\n",
    "\n",
    "db = zlmdb.Database(DBFILE, maxsize=2**30, readonly=False)\n",
    "schema = Schema.attach(db)\n",
    "\n",
    "# load our data into plain python lists\n",
    "vec_x = []\n",
    "vec_y = []\n",
    "vec_category = []\n",
    "vec_value2 = []\n",
    "\n",
    "map_categories = {'null': 0, 'alert': 1, 'warning': 2, 'info': 3, 'ad': 4, 'other': 5}\n",
    "\n",
    "with db.begin() as txn:\n",
    "    i = 0\n",
    "    # query event store and get geo events ..\n",
    "    for pub in schema.publications.select(txn, limit=1000000-1, return_keys=False):\n",
    "        if pub.topic.startswith('com.example.geoservice.'):\n",
    "            e = pub.args[0]\n",
    "            vec_x.append(e['x'])\n",
    "            vec_y.append(e['y'])\n",
    "            vec_category.append(map_categories.get(e['category'], 0))\n",
    "            vec_value2.append(e['value2'])\n",
    "        i += 1\n",
    "        if i % 10000 == 0:\n",
    "            print('processed {} records ..'.format(i))\n",
    "\n",
    "print('finished: collected vectors of length {}'.format(len(vec_x)))\n",
    "\n",
    "# create pandas dataframes from data collected in lists\n",
    "df = pd.DataFrame({\n",
    "    'x': np.asarray(vec_x, dtype='uint16'),\n",
    "    'y': np.asarray(vec_y, dtype='uint16'),\n",
    "    'category': np.asarray(vec_category, dtype='uint8'),\n",
    "    'value2': np.asarray(vec_value2, dtype='float32')\n",
    "})\n",
    "\n",
    "# compute some basic statistics\n",
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>y</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>x</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.569726</td>\n",
       "      <td>0.486984</td>\n",
       "      <td>0.463975</td>\n",
       "      <td>0.458618</td>\n",
       "      <td>0.443541</td>\n",
       "      <td>0.849246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.518156</td>\n",
       "      <td>0.488448</td>\n",
       "      <td>0.344061</td>\n",
       "      <td>0.412281</td>\n",
       "      <td>0.500171</td>\n",
       "      <td>0.407136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.572369</td>\n",
       "      <td>0.450536</td>\n",
       "      <td>0.531439</td>\n",
       "      <td>0.515647</td>\n",
       "      <td>0.436585</td>\n",
       "      <td>0.746666</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.542668</td>\n",
       "      <td>0.474138</td>\n",
       "      <td>0.479702</td>\n",
       "      <td>0.545882</td>\n",
       "      <td>0.529725</td>\n",
       "      <td>0.391943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.451923</td>\n",
       "      <td>0.579718</td>\n",
       "      <td>0.512896</td>\n",
       "      <td>0.533093</td>\n",
       "      <td>0.524437</td>\n",
       "      <td>0.401754</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.754856</td>\n",
       "      <td>0.821296</td>\n",
       "      <td>0.232540</td>\n",
       "      <td>0.593681</td>\n",
       "      <td>0.291027</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "y         0         1         2         3         4         5\n",
       "x                                                            \n",
       "0  0.569726  0.486984  0.463975  0.458618  0.443541  0.849246\n",
       "1  0.518156  0.488448  0.344061  0.412281  0.500171  0.407136\n",
       "2  0.572369  0.450536  0.531439  0.515647  0.436585  0.746666\n",
       "3  0.542668  0.474138  0.479702  0.545882  0.529725  0.391943\n",
       "4  0.451923  0.579718  0.512896  0.533093  0.524437  0.401754\n",
       "5  0.754856  0.821296  0.232540  0.593681  0.291027       NaN"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# helper to truncate x/y coordinates\n",
    "def trunc(val):\n",
    "    return int(val / 20)\n",
    "\n",
    "# apply truncate and compute aggregate\n",
    "df2 = pd.DataFrame({\n",
    "    'x': df['x'].apply(trunc),\n",
    "    'y': df['y'].apply(trunc),\n",
    "    'value': df['value2'],\n",
    "}).pivot_table(index='x', columns='y', values='value', aggfunc=np.median)\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fa51d0ebac8>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw heatmap\n",
    "sns.heatmap(df2, annot=True, fmt=\".3f\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
